package com.briup.impl.util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class CopyUtil {
    // 泛型方法
    public static <T> T copy(T old,String ...ignoreProperties) throws Exception { // Environemtnm
        List<String> list = new ArrayList<>(Arrays.asList(ignoreProperties));
        // 对象所在运行时的类
        Class<T> c = (Class<T>) old.getClass();
        T newObj = c.newInstance(); // 快速用Class调用无参构造器
        // 获取对象的所有字段的信息
        Field[] fields = c.getDeclaredFields();
        for (Field f : fields) { // name,data,devId,srcId
            if(list.contains(f.getName())){ // f是要忽略的字段 跳过不赋值
                continue;
            }
            // newObj.name=old.name
            f.setAccessible(true); // 私有属性也能访问
            f.set(newObj, f.get(old));
        }
        return newObj;
    }
}
